package red.lixiang.utils;

import red.lixiang.model.Product;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

import static red.lixiang.base.ProductConfig.productColorMap;
import static red.lixiang.base.ProductConfig.productNameMap;
import static red.lixiang.base.ProductConfig.productSizeMap;

public class ProductUtils {

    /**
     * 此方法只对自定义的条码有效
     * @param barCode
     * @return
     */
    public static Product getProductByBarCode(String barCode){

        Product product = new Product();
        product.setProductNum(100);
        product.setBarCode(barCode);
        product.setProductId(barCode);
        if(barCode.charAt(0)=='1'){
            product.setProductName("男童");
        }else {
            product.setProductName("女童");
        }

        String colorCode = barCode.substring(1,4);
        product.setColorName(productColorMap.get(colorCode));
        String sizeCode  = barCode.substring(4,7);
        product.setSizeName(productSizeMap.get(sizeCode));
        String originalPrice = barCode.substring(7);
        product.setOriginalPrice(Double.parseDouble(originalPrice));
        BigDecimal bd=new BigDecimal((Double.parseDouble(originalPrice)*0.28));
        double d1=bd.setScale(0,BigDecimal.ROUND_HALF_UP).doubleValue();
        product.setSalePrice(d1);

        return product;

    }

    /**
     *     通过ProductId来获取产品的名字
     */
    public static String getProductNameByProductId(String productId){
        String styleId = productId.substring(4,6);
        return productNameMap.get(styleId);
    }


    /**
     * 通过Lam表达式来从总的库存里面进行统计
     */

    public HashMap sortFromProductList(List<Product> products){

        HashMap<String , Object> map = new HashMap<>();
        //所有的有库存的货
        List<Product> allProduct = products.stream()
                .filter(product -> product.getProductNum()>0)
                .collect(Collectors.toList());
        map.put("allProduct",allProduct);

        //所有有货的数量
        int totalNum = allProduct.stream().mapToInt(Product::getProductNum).sum();

        return map;
    }

    /**
     * 搜索时传入关键词，然后在产品名中进行匹配
     * @param keyWord
     * @return
     */
    public static List<String> getKeyWords(String keyWord){
        Map<String , String > map  = productNameMap;
        List<String> keyWords = new ArrayList<>();
        for (String s : map.keySet()) {
            for (char c : keyWord.toCharArray()) {
                String value  = map.get(s);
                if (value.contains(String.valueOf(c))) {
                    keyWords.add(value);
                }
            }
        }

        return keyWords;

    }

}
